CodeIgniter ফ্রেমওয়ার্কটি সিকিউরিটির দিক থেকে অনেক গুরুত্বপূর্ণ ফিচার সরবরাহ করে, যা অ্যাপ্লিকেশনকে বিভিন্ন ধরনের আক্রমণ (যেমন XSS, CSRF, SQL Injection, এবং ফাইল আপলোড নিরাপত্তা) থেকে রক্ষা করতে সাহায্য করে। সিকিউরিটি ব্যবস্থার সঠিক ব্যবহার অ্যাপ্লিকেশনের ডেটা ও ব্যবহারকারীর নিরাপত্তা নিশ্চিত করতে সাহায্য করে।
এখানে CodeIgniter-এ সিকিউরিটির জন্য কিছু গুরুত্বপূর্ণ টুলস এবং কনফিগারেশন আলোচনা করা হলো।
XSS (Cross-Site Scripting) আক্রমণ একটি জনপ্রিয় আক্রমণ যা ব্যবহারকারীর ইনপুট থেকে স্ক্রিপ্ট ইনজেক্ট করে। CodeIgniter XSS সুরক্ষার জন্য বিল্ট-ইন ফিচার সরবরাহ করে।
CodeIgniter-এ XSS সুরক্ষা ডিফল্টভাবে সক্রিয় থাকে। তবে, আপনি Config/Security.php
ফাইলে এটি কনফিগার করতে পারেন:
public $XSSFilter = true; // XSS ফিল্টার চালু করা
esc()
ফাংশন: এটি HTML ইনপুটকে সেফ করে এবং XSS আক্রমণ থেকে সুরক্ষা প্রদান করে।$username = esc($this->request->getVar('username'));
purify()
ফাংশন: এটি HTML ডেটা ফিল্টার করতে সাহায্য করে।$cleaned_data = \Config\Services::security()->xss_clean($input_data);
CSRF আক্রমণ একটি অ্যাটাক যা একজন ব্যবহারকারীকে অনিচ্ছাকৃতভাবে ক্ষতিকর রিকোয়েস্ট পাঠাতে বাধ্য করে। CodeIgniter CSRF সুরক্ষার জন্য বিল্ট-ইন ফিচার সরবরাহ করে।
আপনি Config/Security.php
ফাইলে CSRF সুরক্ষা সক্রিয় করতে পারেন:
public $CSRFProtection = true; // CSRF সুরক্ষা চালু করা
public $CSRFTokenName = 'csrf_test_name'; // CSRF টোকেনের নাম
public $CSRFHeaderName = 'X-CSRF-TOKEN'; // CSRF হেডারের নাম
public $CSRFExpire = 7200; // CSRF টোকেনের মেয়াদ শেষ হওয়ার সময়
CodeIgniter ফর্মে CSRF টোকেন ব্যবহার করতে নিম্নলিখিত কোডটি ব্যবহার করুন:
<form action="/submit" method="post">
<?= csrf_field() ?> <!-- CSRF টোকেন -->
<input type="text" name="username">
<button type="submit">Submit</button>
</form>
SQL Injection হল এমন একটি আক্রমণ যেখানে আক্রমণকারী ডাটাবেসে অবৈধ SQL কোড ইনজেক্ট করতে সক্ষম হয়। CodeIgniter এর Query Builder SQL Injection থেকে সুরক্ষা নিশ্চিত করে।
// SQL ইনজেকশন প্রতিরোধের জন্য Query Builder ব্যবহার করুন
$builder = $db->table('users');
$builder->where('email', $email);
$query = $builder->get();
bindParam()
ফাংশন ব্যবহার করুন:$query = $this->db->query("SELECT * FROM users WHERE email = :email", ['email' => $email]);
CodeIgniter ফাইল আপলোডের সময় সুরক্ষা নিশ্চিত করতে সাহায্য করে। এটি আপলোডের ফাইলের টাইপ এবং সাইজ চেক করে।
$validationRules = [
'file' => 'uploaded[file]|max_size[file,2048]|ext_in[file,jpg,jpeg,png,gif]|mime_in[file,image/jpg,image/jpeg,image/png,image/gif]'
];
if ($this->validate($validationRules)) {
$file = $this->request->getFile('file');
if ($file->isValid() && !$file->hasMoved()) {
$file->move(WRITEPATH . 'uploads');
}
}
Password Hashing ব্যবহারকারীর পাসওয়ার্ড সুরক্ষিত রাখতে অত্যন্ত গুরুত্বপূর্ণ। CodeIgniter-এ Password Hashing করার জন্য password_hash()
এবং password_verify()
ফাংশন ব্যবহার করা হয়।
$password = 'user_password';
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
// যখন ব্যবহারকারীর লগইন হচ্ছে:
if (password_verify($password, $hashedPassword)) {
echo 'Password is correct!';
} else {
echo 'Invalid password!';
}
Session Hijacking হল একটি আক্রমণ যেখানে আক্রমণকারী ব্যবহারকারীর সেশন টোকেন চুরি করে। এটি প্রতিরোধ করতে, CodeIgniter কিছু সেশন সুরক্ষা বৈশিষ্ট্য সরবরাহ করে।
public $sessionMatchIP = true; // সেশন আইপি ঠিকানা যাচাই
public $sessionTimeToUpdate = 300; // সেশন পুনঃজেনারেট করার সময়
public $sessionRegenerateDestroy = true; // সেশন রিজেনারেট করলে পুরানো সেশন ধ্বংস হবে
আপনার অ্যাপ্লিকেশনটি HTTPS ব্যবহার করলে এটি সংবেদনশীল তথ্য (যেমন লগইন পাসওয়ার্ড) সুরক্ষিত রাখতে সাহায্য করে। CodeIgniter-এ secure
কুকি ব্যবহার করে সেশন সুরক্ষা বাড়ানো যায়।
public $cookieSecure = true; // কুকির জন্য Secure সেট করা
public $cookieHTTPOnly = true; // কুকির জন্য HTTPOnly সেট করা
CodeIgniter-এ সিকিউরিটি অ্যাপ্লিকেশনকে সুরক্ষিত রাখতে অত্যন্ত গুরুত্বপূর্ণ। XSS, CSRF, SQL Injection, ফাইল আপলোড সুরক্ষা, Password Hashing, এবং Session Hijacking Prevention সহ বিভিন্ন নিরাপত্তা ফিচার ব্যবহারে আপনার অ্যাপ্লিকেশনকে আক্রমণ থেকে রক্ষা করা যায়। CodeIgniter এর বিল্ট-ইন সিকিউরিটি ফিচার এবং কনফিগারেশন সঠিকভাবে ব্যবহার করলে অ্যাপ্লিকেশনকে সুরক্ষিত রাখা সম্ভব।
Data sanitization এবং validation হল ওয়েব অ্যাপ্লিকেশন নিরাপত্তা নিশ্চিত করার জন্য গুরুত্বপূর্ণ পদ্ধতি। CodeIgniter এই দুটি প্রক্রিয়াকে সহজভাবে পরিচালনা করতে সহায়তা করে, যা ইউজার ইনপুটকে সুরক্ষিত এবং সঠিক করে তোলে। এই দুটি পদ্ধতি বিভিন্ন ধরনের আক্রমণ যেমন SQL injection, XSS (Cross-Site Scripting), এবং CSRF (Cross-Site Request Forgery) প্রতিরোধে সহায়তা করে।
Sanitization হল একটি প্রক্রিয়া যার মাধ্যমে ইউজারের ইনপুট থেকে অবাঞ্ছিত বা বিপজ্জনক চরিত্র বা কোড মুছে ফেলা হয়। এটি ইনপুট ডেটাকে clean করে তোলে যাতে সেটি নিরাপদে প্রসেস করা যায়।
CodeIgniter-এর Input Class ইনপুট ডেটা স্যানিটাইজ করতে সাহায্য করে।
$this->load->library('security');
// Get sanitized input
$username = $this->input->post('username', TRUE); // TRUE to sanitize
$password = $this->input->post('password', TRUE);
// Sanitization automatically applies XSS filtering
এখানে, TRUE
প্যারামিটার স্যানিটাইজেশন প্রক্রিয়া চালু করে, যা ইনপুটের মধ্যে XSS attacks রোধ করতে সহায়ক।
Validation হল এমন একটি প্রক্রিয়া যার মাধ্যমে ইনপুট ডেটা নির্দিষ্ট শর্তের সাথে মিলিয়ে যাচাই করা হয়, যাতে ইনপুট সঠিক ফরম্যাটে থাকে এবং প্রয়োজনীয় শর্ত পূরণ করে।
CodeIgniter Form Validation Class সরবরাহ করে, যা ইনপুট ভ্যালিডেশনকে সহজ করে তোলে।
প্রথমে Form Validation Library লোড করতে হবে:
$this->load->library('form_validation');
এরপর, আপনি ফর্মের ইনপুটের জন্য ভ্যালিডেশন রুলস সেট করবেন।
$this->form_validation->set_rules('username', 'Username', 'required|min_length[5]|max_length[12]');
$this->form_validation->set_rules('password', 'Password', 'required|min_length[8]');
// ফর্ম ভ্যালিডেশন চালানো
if ($this->form_validation->run() == FALSE) {
// ইনপুট ভ্যালিডেশন ব্যর্থ হলে
echo validation_errors(); // এর মাধ্যমে ত্রুটির বার্তা দেখানো হবে
} else {
// ইনপুট সঠিক হলে
echo "Form Validation Successful!";
}
এখানে, set_rules()
মেথডের মাধ্যমে ফিল্ডের জন্য ভ্যালিডেশন রুলস নির্ধারণ করা হয়:
CodeIgniter-এর XSS Filtering স্বয়ংক্রিয়ভাবে ইনপুটের মধ্যে সম্ভাব্য XSS attacks প্রতিরোধ করে।
// ইউজার ইনপুট থেকে XSS ফিল্টারিং
$username = $this->security->xss_clean($this->input->post('username'));
// XSS ফিল্টারিংয়ের মাধ্যমে পটেনশিয়াল আক্রমণ প্রতিরোধ
এখানে xss_clean()
মেথড ইনপুটে থাকা JavaScript বা HTML tags মুছে ফেলবে যা XSS attack তৈরি করতে পারে।
CodeIgniter CSRF protection সক্রিয়ভাবে ফর্মের মাধ্যমে অবৈধ রিকোয়েস্টগুলো প্রতিরোধ করতে সহায়তা করে।
app/Config/Security.php
ফাইলে CSRF সক্রিয় করা:public $CSRFProtection = true;
<?= csrf_field(); ?>
এটি স্বয়ংক্রিয়ভাবে hidden CSRF token তৈরি করবে এবং সাবমিট করা ফর্মের মাধ্যমে এটি যাচাই করবে।
CodeIgniter আপনাকে কাস্টম ভ্যালিডেশন রুলস তৈরি করার সুযোগ দেয়। আপনি set_message()
এবং callback_function
ব্যবহার করে কাস্টম ভ্যালিডেশন রুলস যোগ করতে পারেন।
// কাস্টম ভ্যালিডেশন রুল তৈরি
public function validate_username($str)
{
if ($str == 'admin') {
$this->form_validation->set_message('validate_username', 'The {field} field cannot be "admin".');
return FALSE;
}
return TRUE;
}
$this->form_validation->set_rules('username', 'Username', 'required|callback_validate_username');
এখানে, validate_username()
ফাংশন একটি কাস্টম ভ্যালিডেশন রুল হিসেবে কাজ করছে যা "admin" শব্দটি ইনপুট হিসাবে গ্রহণ করবে না।
ফাইল আপলোডের সময়ও স্যানিটাইজেশন এবং ভ্যালিডেশন অত্যন্ত গুরুত্বপূর্ণ। CodeIgniter ফাইল আপলোডের জন্য সঠিক ফাইল টাইপ, সাইজ এবং এক্সটেনশন যাচাই করতে পারে।
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'jpg|jpeg|png';
$config['max_size'] = 2048; // Max size in KB
$this->load->library('upload', $config);
if (!$this->upload->do_upload('userfile')) {
echo $this->upload->display_errors();
} else {
$data = $this->upload->data();
echo "File uploaded successfully!";
}
এখানে:
jpg
, jpeg
, এবং png
ফাইল প্রকার অনুমোদিত।XSS (Cross-Site Scripting) এবং CSRF (Cross-Site Request Forgery) হল দুটি সাধারণ নিরাপত্তা হুমকি, যা ওয়েব অ্যাপ্লিকেশনে আক্রমণকারী দ্বারা করা হতে পারে। CodeIgniter এই দুটি আক্রমণ থেকে সুরক্ষা দেওয়ার জন্য বিভিন্ন বিল্ট-ইন ফিচার সরবরাহ করে।
XSS আক্রমণে, আক্রমণকারী ম্যালিশিয়াস স্ক্রিপ্ট কোড ব্যবহারকারীর ব্রাউজারে চালানোর জন্য একটি ওয়েব অ্যাপ্লিকেশনকে প্রভাবিত করে। এটি ব্যবহারকারীর সেশন, কুকি, বা অন্যান্য গুরুত্বপূর্ণ তথ্য চুরি করার জন্য ব্যবহৃত হতে পারে।
CodeIgniter-এ XSS Filtering ফিচারটি বিল্ট-ইনভাবে রয়েছে, যা ইউজার ইনপুটে ম্যালিশিয়াস স্ক্রিপ্ট ইনজেকশন ব্লক করতে সহায়তা করে।
CodeIgniter-এর Security
ক্লাসে XSS ফিল্টারিং চালু করা থাকে, তবে এটি ইনপুটে ম্যালিশিয়াস কোড থাকার ক্ষেত্রে তা ফিল্টার করে।
xss_clean()
ফাংশন ব্যবহার:$clean_input = $this->security->xss_clean($this->request->getPost('user_input'));
form_open()
ফর্ম হেল্পার ব্যবহার করার সময় xss_clean()
চালানো যাবে।$clean_input = $this->security->xss_clean($this->request->getPost('input_field'));
CSRF আক্রমণ ব্যবহারকারীর অনুমতি ছাড়া তার ব্রাউজারের মাধ্যমে একটি অনিচ্ছাকৃত রিকোয়েস্ট পাঠানোর মাধ্যমে ঘটে। এটি সাইটের ব্যবহারকারীর সেশনের অধিকার নিয়ে আক্রমণকারী গোপনে কোনো অনুকূল অ্যাকশন সম্পাদন করতে পারে।
CodeIgniter ডিফল্টভাবে CSRF Protection সক্রিয় করে, তবে এটি কনফিগার করা বা কাস্টমাইজও করা যেতে পারে। CSRF সুরক্ষা নিশ্চিত করার জন্য, CodeIgniter টোকেন ব্যবহার করে, যা ফর্ম সাবমিশনের সময় যাচাই করে।
CSRF
ফিচার কনফিগারেশন: app/Config/Security.php
ফাইলে CSRF সুরক্ষা সক্ষম করার জন্য নিচের মত কনফিগার করুন।public $CSRFProtection = true; // CSRF সুরক্ষা সক্রিয়
public $csrfTokenName = 'csrf_test_name'; // CSRF টোকেনের নাম
public $csrfHeaderName = 'X-CSRF-TOKEN'; // CSRF টোকেন হেডার
public $csrfExpire = 7200; // CSRF টোকেনের মেয়াদ
csrf_token()
এবং csrf_hash()
ব্যবহার:// CSRF টোকেন ইনপুট ফর্মে অ্যাড করা
echo form_open('your/form/action');
echo form_input(['name' => 'username', 'value' => '']);
echo form_submit('submit', 'Submit');
echo csrf_field(); // CSRF টোকেন ফর্মে অ্যাড করা
echo form_close();
csrf_field()
ফাংশনটি স্বয়ংক্রিয়ভাবে CSRF টোকেন ইনপুট হিসেবে HTML ফর্মে যোগ করবে।CodeIgniter স্বয়ংক্রিয়ভাবে POST রিকোয়েস্টের CSRF টোকেন যাচাই করে, তবে আপনি চাইলে csrf_verify()
ফাংশন ব্যবহার করে ম্যানুয়ালি যাচাই করতে পারেন।
if (!$this->security->csrf_verify()) {
echo 'Invalid CSRF Token';
}
xss_clean()
মেথড প্রদান করে, যা ইনপুট ডেটাতে যেকোনো স্ক্রিপ্ট ফিল্টার করে।SQL Injection হল একটি অত্যন্ত বিপজ্জনক নিরাপত্তা দুর্বলতা, যেখানে আক্রমণকারী ডাটাবেসে ম্যালিসিয়াস SQL কোড ইনজেক্ট করে অ্যাপ্লিকেশনের ডেটা চুরি বা ক্ষতিগ্রস্ত করতে পারে। SQL Injection থেকে সুরক্ষা নিশ্চিত করা খুবই গুরুত্বপূর্ণ, কারণ এটি আপনার অ্যাপ্লিকেশনকে ডেটা চুরির, সিস্টেমের ক্ষতি বা এমনকি পুরো ডাটাবেসটি মুছে ফেলার ঝুঁকিতে ফেলতে পারে।
CodeIgniter এ SQL Injection থেকে সুরক্ষা পাওয়ার জন্য বিভিন্ন বিল্ট-ইন সুরক্ষা ফিচার এবং সিকিউর কোডিং পদ্ধতি ব্যবহার করা যেতে পারে।
CodeIgniter এর Query Builder ক্লাস SQL ইনজেকশন প্রতিরোধে অত্যন্ত কার্যকর। Query Builder SQL কুয়েরি তৈরি করতে প্যারামিটারাইজড কোয়েরি ব্যবহার করে, যা ইনপুট ডেটা নিরাপদে পরিচালনা করতে সহায়ক।
namespace App\Controllers;
use App\Models\ProductModel;
class ProductController extends BaseController
{
public function index()
{
$model = new ProductModel();
// ইনপুট ডেটা গ্রহণ
$searchTerm = $this->request->getPost('search');
// প্যারামিটারাইজড কোয়েরি ব্যবহার
$builder = $model->builder();
$builder->like('name', $searchTerm); // LIKE query
$products = $builder->get()->getResult();
// রেসপন্স প্রেরণ
return view('product_list', ['products' => $products]);
}
}
এই পদ্ধতিতে, SQL কুয়েরির অংশগুলোর সাথে সরাসরি ব্যবহারকারীর ইনপুট যুক্ত না করে, কোয়েরি তৈরির সময় ইনপুট প্যারামিটার হিসেবে স্থানান্তরিত করা হয়। এতে SQL Injection এর ঝুঁকি কমে যায়।
CodeIgniter এর Active Record (যা Query Builder হিসেবেও পরিচিত) স্বয়ংক্রিয়ভাবে ইনপুট ডেটাকে স্যানিটাইজ করে। তাই আপনাকে SQL কুয়েরিতে তথ্য ইনজেকশন রোধ করতে আলাদা কিছু করার প্রয়োজন হয় না।
namespace App\Models;
use CodeIgniter\Model;
class ProductModel extends Model
{
public function getProductById($id)
{
// Active Record এর মাধ্যমে ডেটা রিট্রিভ
return $this->where('id', $id)->first();
}
}
এখানে where()
পদ্ধতিটি ইনপুট ডেটা স্যানিটাইজ করে, যার ফলে SQL Injection রোধ করা হয়।
CodeIgniter Query Binding সিস্টেম ব্যবহার করে প্যারামিটারাইজড কোয়েরি তৈরি করতে সহায়তা করে। এতে প্লেইন SQL কোডে ব্যবহারকারীর ইনপুট মিশ্রিত না হয়ে, SQL ইনজেকশন প্রতিরোধ করা হয়।
namespace App\Controllers;
use App\Models\ProductModel;
class ProductController extends BaseController
{
public function search()
{
$model = new ProductModel();
// ব্যবহারকারীর ইনপুট থেকে সার্চ শব্দ গ্রহণ
$searchTerm = $this->request->getPost('search');
// Query Binding এর মাধ্যমে SQL ইনজেকশন প্রতিরোধ
$query = $model->query('SELECT * FROM products WHERE name LIKE :search:', ['search' => "%$searchTerm%"]);
$products = $query->getResult();
// রেসপন্স
return view('product_list', ['products' => $products]);
}
}
এখানে, :search
হল একটি প্যারামিটার, যা নিরাপদে ব্যবহারকারীর ইনপুট দিয়ে পরিবর্তিত হয়।
যতটা সম্ভব, Input Validation এবং Sanitization ব্যবহারকারীর ইনপুট নিরাপদ করে। এই পদ্ধতিগুলি ব্যবহারকারীর ইনপুট সঠিক এবং নিরাপদ কিনা তা পরীক্ষা করে, এবং শুধুমাত্র বৈধ ইনপুট গ্রহণ করে।
namespace App\Controllers;
use CodeIgniter\Controller;
class ProductController extends Controller
{
public function create()
{
// ইনপুট ভ্যালিডেশন
if (!$this->validate([
'name' => 'required|min_length[3]|max_length[100]',
'price' => 'required|decimal'
])) {
return view('product_form', ['validation' => $this->validator]);
}
// ইনপুট গ্রহণ
$name = $this->request->getPost('name');
$price = $this->request->getPost('price');
// Model এ ডেটা ইনসার্ট
$productModel = new \App\Models\ProductModel();
$productModel->save([
'name' => $name,
'price' => $price
]);
}
}
এখানে validate()
মেথড ব্যবহার করা হয়েছে ইনপুট ডেটা যাচাই করার জন্য, যা SQL Injection প্রতিরোধে সহায়ক।
যদি কোয়েরি তৈরি করার সময় Query Builder ব্যবহার না করতে হয়, তাহলে escape() ফাংশন ব্যবহার করে কাঁচা SQL ইনপুট স্যানিটাইজ করা যেতে পারে।
namespace App\Controllers;
use App\Models\ProductModel;
class ProductController extends BaseController
{
public function search()
{
$searchTerm = $this->request->getPost('search');
// Escape input to prevent SQL injection
$escapedSearchTerm = $this->db->escapeLikeString($searchTerm);
$builder = $this->db->table('products');
$builder->like('name', $escapedSearchTerm);
$products = $builder->get()->getResult();
return view('product_list', ['products' => $products]);
}
}
এখানে escapeLikeString()
ফাংশন ব্যবহার করা হয়েছে, যা ইনপুট ডেটা সঠিকভাবে স্যানিটাইজ করে।
SQL ইনজেকশন প্রতিরোধের জন্য Prepared Statements ব্যবহৃত হতে পারে, যা ডেটাবেসে কোয়েরি চালানোর আগে ডেটা এবং কোয়েরি অংশ আলাদা রাখে।
namespace App\Controllers;
use App\Models\ProductModel;
class ProductController extends BaseController
{
public function getProductById($id)
{
$query = $this->db->query('SELECT * FROM products WHERE id = :id:', ['id' => $id]);
return $query->getRow();
}
}
এখানে, :id
হল একটি প্যারামিটার যা SQL কুয়েরির অংশ হিসেবে যুক্ত করা হয়, এবং ['id' => $id]
দিয়ে প্যারামিটার নিরাপদে সেট করা হয়।
SQL Injection প্রতিরোধের জন্য CodeIgniter বেশ কয়েকটি নিরাপদ পদ্ধতি সরবরাহ করে, যেমন Query Builder, Prepared Statements, Input Validation, এবং Sanitization। এই পদ্ধতিগুলোর মাধ্যমে ইনপুট ডেটাকে সঠিকভাবে প্রক্রিয়া করে ডাটাবেসে নিরাপদভাবে সংরক্ষণ করা হয়, যা SQL Injection থেকে অ্যাপ্লিকেশনকে সুরক্ষিত রাখে।
CodeIgniter-এ Password Hashing এবং Authentication নিরাপত্তার গুরুত্বপূর্ণ দিক। Password Hashing নিশ্চিত করে যে ব্যবহারকারীর পাসওয়ার্ড প্লেইন টেক্সটে সংরক্ষিত না হয়ে hashed আকারে রাখা হয়, যা নিরাপত্তা বাড়ায়। Authentication ব্যবহারকারীর পরিচয় যাচাই করার প্রক্রিয়া, যাতে শুধুমাত্র অনুমোদিত ব্যবহারকারীরা অ্যাপ্লিকেশনে প্রবেশ করতে পারে।
পাসওয়ার্ড হ্যাশিং একটি নিরাপত্তা প্রক্রিয়া, যেখানে পাসওয়ার্ডকে একটি একমুখী ফাংশন দিয়ে হ্যাশ করা হয় এবং এটি ডেটাবেসে সংরক্ষণ করা হয়। যখন ব্যবহারকারী লগইন করতে চেষ্টা করেন, তখন তাদের প্রদত্ত পাসওয়ার্ডকে হ্যাশ করা পাসওয়ার্ডের সাথে তুলনা করা হয়।
CodeIgniter 4 এ Password হ্যাশিং করতে password_hash()
এবং password_verify()
ফাংশন ব্যবহার করা হয়।
namespace App\Controllers;
use CodeIgniter\Controller;
class AuthController extends Controller {
public function register() {
// ফর্ম ডেটা
$password = $this->request->getPost('password');
// পাসওয়ার্ড হ্যাশিং
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
// ডাটাবেসে হ্যাশড পাসওয়ার্ড সংরক্ষণ করুন
$data = [
'username' => $this->request->getPost('username'),
'email' => $this->request->getPost('email'),
'password' => $hashedPassword
];
// ডাটাবেসে ডেটা ইনসার্ট করুন
// Assume you have a model for users
$userModel = new \App\Models\UserModel();
$userModel->save($data);
return redirect()->to('login'); // অথবা Success Page
}
}
password_hash($password, PASSWORD_DEFAULT)
: এটি একটি নিরাপদ হ্যাশ (যেমন bcrypt) তৈরি করবে, যা পাসওয়ার্ডকে নিরাপদে সংরক্ষণ করবে।PASSWORD_DEFAULT
: এটি bcrypt অথবা অন্য উন্নত পদ্ধতিতে পাসওয়ার্ড হ্যাশ করবে।লগইন করার সময়, ব্যবহারকারীর ইনপুট করা পাসওয়ার্ড যাচাই করার জন্য password_verify()
ফাংশন ব্যবহার করা হয়।
public function login() {
// ইনপুট ডেটা
$email = $this->request->getPost('email');
$password = $this->request->getPost('password');
// ব্যবহারকারী ডেটা প্রাপ্তি
$userModel = new \App\Models\UserModel();
$user = $userModel->where('email', $email)->first();
// পাসওয়ার্ড যাচাই
if ($user && password_verify($password, $user['password'])) {
// লগইন সফল
session()->set('user_id', $user['id']);
return redirect()->to('dashboard'); // ড্যাশবোর্ডে রিডাইরেক্ট করুন
} else {
// লগইন ব্যর্থ
return redirect()->to('login')->with('error', 'Invalid credentials');
}
}
password_verify($password, $hashedPassword)
: এটি ব্যবহারকারীর ইনপুট করা পাসওয়ার্ড এবং ডাটাবেসে সংরক্ষিত হ্যাশড পাসওয়ার্ডের সাথে তুলনা করবে।Authentication হল ব্যবহারকারীর পরিচয় যাচাই করার প্রক্রিয়া, যেখানে পাসওয়ার্ড হ্যাশিং ব্যবহৃত হয়। লগইন এবং সেশন ব্যবস্থাপনা এই প্রক্রিয়ার অন্তর্ভুক্ত।
CodeIgniter সেশন পরিচালনার জন্য বিল্ট-ইন সেশন লাইব্রেরি সরবরাহ করে। সেশন ব্যবহার করে আপনি লগইন করা ব্যবহারকারীকে ট্র্যাক করতে পারেন।
namespace App\Controllers;
use CodeIgniter\Controller;
class AuthController extends Controller {
public function login() {
// ফর্ম ডেটা
$email = $this->request->getPost('email');
$password = $this->request->getPost('password');
// ব্যবহারকারী ডেটা প্রাপ্তি
$userModel = new \App\Models\UserModel();
$user = $userModel->where('email', $email)->first();
// পাসওয়ার্ড যাচাই
if ($user && password_verify($password, $user['password'])) {
// সেশন সেট করা
session()->set('user_id', $user['id']);
session()->set('username', $user['username']);
return redirect()->to('dashboard'); // ড্যাশবোর্ডে রিডাইরেক্ট করুন
} else {
return redirect()->to('login')->with('error', 'Invalid credentials');
}
}
public function logout() {
// সেশন ডেস্ট্রয় করা
session()->destroy();
return redirect()->to('login'); // লগইন পেজে রিডাইরেক্ট
}
}
session()->set()
: সেশন ডেটা সেট করে।session()->destroy()
: সেশন মুছে দেয়।লগইন করা ব্যবহারকারীর প্রমাণীকরণ যাচাই করতে, আপনি সেশন ডেটা ব্যবহার করতে পারেন:
public function dashboard() {
if (!session()->has('user_id')) {
return redirect()->to('login'); // যদি সেশন না থাকে, লগইন পেজে রিডাইরেক্ট
}
// ড্যাশবোর্ড কনটেন্ট দেখান
return view('dashboard');
}
Authorization হল একটি ব্যবহারকারী কোন বিশেষ ভূমিকা বা অনুমতি পায় তা যাচাই করা। যেমন, কিছু পেজ শুধুমাত্র প্রশাসকরা অ্যাক্সেস করতে পারবে।
public function adminDashboard() {
if (!session()->has('user_id') || session()->get('role') !== 'admin') {
return redirect()->to('login'); // প্রশাসক ছাড়া অন্য কেউ অ্যাক্সেস করতে পারবে না
}
return view('admin_dashboard');
}
এখানে, role
সেশন ভেরিয়েবলের মাধ্যমে একজন ব্যবহারকারী প্রশাসক কিনা তা যাচাই করা হয়।
password_hash()
এবং password_verify()
ব্যবহার করুন।CodeIgniter এ Password Hashing এবং Authentication নিরাপত্তা এবং প্রমাণীকরণ ব্যবস্থাপনার জন্য গুরুত্বপূর্ণ দুটি উপাদান। পাসওয়ার্ড হ্যাশিংয়ের মাধ্যমে আপনি নিরাপদভাবে পাসওয়ার্ড সংরক্ষণ করতে পারেন এবং সেশন ম্যানেজমেন্ট এবং role-based authorization এর মাধ্যমে ব্যবহারকারীর প্রমাণীকরণ এবং অনুমতি যাচাই করতে পারেন।
Read more